﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections;
using System.Windows.Media;

using System.ComponentModel;
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

using Civilisation_code.PJoueur;
using Civilisation_code.PCarte;
using Civilisation_code.PInterfaces_Fabrique_Unite;
using Civilisation_code.PPartie;
using Civilisation_code.PRessource;
using Civilisation_code.Implementation_Unite_EII;
using Civilisation_code.Implementation_Unite_INFO;

namespace Tests
{
    [TestClass]
    public class TestChargement
    {
        [TestMethod]
        public void TestSauvegardeChargement()
        {

            //Instantiation partie
            Monteur_Partie monteur = new Monteur_Partie_IMPL();

            Hashtable joueurs = new Hashtable();
            joueurs.Add("Flo", new Tuple<string, Color>("INFO", Colors.Blue));
            joueurs.Add("Nico", new Tuple<string, Color>("INFO", Colors.Red));

            monteur.genererPartie(joueurs, false);


            //Sauvegarde
            monteur._partie.sauvegarder("sauvegarde_test.civ");

            //Chargement
            Partie p = Partie.charger("sauvegarde_test.civ");

            Assert.IsNotNull(p);

            Assert.IsNotNull(p._carte);
            Assert.IsNotNull(p._carte._cases);
            Assert.AreEqual(625, p._carte._cases.Count);

            for (int x = 0; x < 25; x++)
            {
                for (int y = 0; y < 25; y++)
                {
                    Ressource r1 = p._carte.getCase(x,y)._ressource;
                    Ressource r2 = monteur._partie._carte.getCase(x, y)._ressource;
                    Assert.AreEqual(r1, r2);
                }
            }

            Assert.IsNotNull(p._joueurs);
            Assert.AreEqual(2, p._joueurs.Count);
            Assert.AreEqual(p._joueurs[0]._nom, monteur._partie._joueurs[0]._nom);
            Assert.AreEqual(p._joueurs[1]._nom, monteur._partie._joueurs[1]._nom);
        }

    }
}
